/**
 * https://leetcode-cn.com/problems/binary-tree-tilt/
 * 二叉树的坡度
 * @param root 
 */
const findTilt = (root: TreeNode | null): number => {
    if (root === null) return 0

    let ans = 0;

    /**
     * 获取节点的坡度
     * @param n 
     * @returns 
     */
    const getNodeTile = (n: TreeNode | null): number => {
        if (n === null) return 0;
        // 叶子节点, 返回自己的值
        if (n.left === null && n.right === null) return n.val

        // 到这不是叶子节点

        // 获取左节点的和
        const lSum = getNodeTile(n.left);

        // 获取右节点的和
        const rSum = getNodeTile(n.right);

        // 计算坡度
        ans += Math.abs(lSum - rSum)

        // 返回节点之和
        return lSum + rSum
    }

    return ans
};